package csu.fun.spring_store.persistence;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import csu.fun.spring_store.domain.Category;
import csu.fun.spring_store.domain.Item;
import csu.fun.spring_store.domain.Product;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;

@Repository
public interface ItemMapper extends BaseMapper<Item> {

    @Select("SELECT * FROM item WHERE productid = #{productid}")
    List<Item> selectByproductid(String productid);

    @Update("update item set status = 'N' where itemid = #{itemid}")
    void itemxiajia(String itenid);
    @Update("update item set status = 'P' where itemid = #{itemid}")
    void itemshangjia(String itenid);
    //判断是否存在指定id的item（itemid不区分大小写）
    default boolean isExistItem(String itemid) {
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("itemid", itemid);
        return this.exists(queryWrapper);
    }

    //返回指定id的item
    default Item getItemByItemid(String itemid) {
        return this.selectById(itemid);
    }

    //插入一个新item，返回实际操作的行数。item不为null且itemid必须不在数据库中存在，否则不进行任何修改
    default int setNewItem(Item item) {
        if (item == null) {
            return 0;
        }
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("itemid", item.getItemid());
        if (!this.exists(queryWrapper)) {
            return this.insert(item);
        }
        return 0;
    }

    //一次性更新整条记录，返回实际修改的行数。account不能为null且userid必须已经在数据库中存在，否则不进行任何修改
    default int setExistItem(Item item) {
        if (item != null) {
            return this.updateById(item);
        }
        return 0;
    }

    /*
      单独修改数据库中的某个值，返回修改的行数。userid必须已经在数据库中存在，否则不进行任何修改
     */
    default int setProductidByItemid(String itemid, String productid) {
        Item item = this.selectById(itemid);
        if (item != null) {
            item.setProductid(productid);
            return this.updateById(item);
        }
        return 0;
    }
    default int setListpriceByItemid(String itemid, double listprice) {
        Item item = this.selectById(itemid);
        if (item != null) {
            BigDecimal bigDecimal = new BigDecimal(listprice);
            item.setListprice(bigDecimal);
            return this.updateById(item);
        }
        return 0;
    }
    default int setUnitcostByItemid(String itemid, double unitcost) {
        Item item = this.selectById(itemid);
        if (item != null) {
            BigDecimal bigDecimal = new BigDecimal(unitcost);
            item.setUnitcost(bigDecimal);
            return this.updateById(item);
        }
        return 0;
    }
    default int setSupplierByItemid(String itemid, int supplier) {
        Item item = this.selectById(itemid);
        if (item != null) {
            item.setSupplier(supplier);
            return this.updateById(item);
        }
        return 0;
    }
    default int setStatusByItemid(String itemid, String status) {
        Item item = this.selectById(itemid);
        if (item != null) {
            item.setStatus(status);
            return this.updateById(item);
        }
        return 0;
    }
    default int setAttr1ByItemid(String itemid, String attr1) {
        Item item = this.selectById(itemid);
        if (item != null) {
            item.setAttr1(attr1);
            return this.updateById(item);
        }
        return 0;
    }
    default int setAttr2ByItemid(String itemid, String attr2) {
        Item item = this.selectById(itemid);
        if (item != null) {
            item.setAttr2(attr2);
            return this.updateById(item);
        }
        return 0;
    }
    default int setAttr3ByItemid(String itemid, String attr3) {
        Item item = this.selectById(itemid);
        if (item != null) {
            item.setAttr3(attr3);
            return this.updateById(item);
        }
        return 0;
    }
    default int setAttr4ByItemid(String itemid, String attr4) {
        Item item = this.selectById(itemid);
        if (item != null) {
            item.setAttr4(attr4);
            return this.updateById(item);
        }
        return 0;
    }
    default int setAttr5ByItemid(String itemid, String attr5) {
        Item item = this.selectById(itemid);
        if (item != null) {
            item.setAttr5(attr5);
            return this.updateById(item);
        }
        return 0;
    }

    //删除指定id的item，返回实际修改的行数
    default int removeItemByItemid(String itemid) {
        return this.deleteById(itemid);
    }

}
